/**
 * 
 */
package com.taobao.snowsnow.hibernate.dao;

import java.util.Collection;
import java.util.List;

import org.hibernate.Session;
import org.hibernate.criterion.DetachedCriteria;

/**
 * @author Tux
 *
 * 创建时间: 2011-6-7 上午09:37:26
 */
@SuppressWarnings("rawtypes")
public interface BaseDao {
	/**  
     * 得到 Hibernate的Session  
     * @return  
     * 			Session
     */  
    public Session getLocalSession() throws Exception;
    
	/**
	 * 新增
	 * @param entity
	 * 			要添加的实体对象
	 */
	public void create(Object entity) throws Exception;
	/**
	 * 修改
	 * @param entity
	 * @throws Exception
	 */
	public void update(Object entity) throws Exception;
	
	/**
	 * 新建或者更新
	 * @param entity
	 * @throws Exception
	 */
	public void saveOrUpdate(Object entity) throws Exception;
	/**
	 * 删除数据
	 * @param entity
	 * 			要删除的实体对象
	 * @throws Exception
	 */
	public void remove(Object entity) throws Exception;
	
	/**
	 * 删除多个对象
	 * @param list	
	 * 			要删除的列表
	 * @throws Exception
	 */
	public void removeList(List list)throws Exception;  
	
	/*  
     * 以下为查询相关语句  
     *   
     */  
	
	/**
	 * 分页查找
	 * @param c
	 * 			要查找的类
	 * @param page
	 * 			起始页
	 * @param limit
	 * 			每页的大小
	 * @return
	 * 			查找到列表
	 * @throws Exception
	 */
	public List findByCriteriaByPage(Class c,int page, int limit)throws Exception;   
    
	public Collection findByCriteria(DetachedCriteria dc)throws Exception ;   
       
    /**
     * 查找记录总数
     * @param c
     * @return
     * @throws Exception
     */
    public long countByCriteria(Class c) throws Exception ; 
    
    /**  
     * 调用hibernate的get方法得到对象  
     */  
	public Object get(Class c, int id) throws Exception;   
	
	/**
	 * 查找某个属性
	 * @param c
	 * 			要查找的类
	 * @param name
	 * 			要查找的数据表字段名
	 * @param value
	 * 			要查找的值
	 * @return
	 * 			查找到的列表
	 * @throws Exception
	 */
	public List findByProperty(Class c, String name, Object value) throws Exception;
	
	/**
	 * 查找某个属性
	 * 搜索的方式有:
	 * <li>1 模糊
	 * <li>2 精确
	 * <li>3 首字母匹配
	 * <li>4 尾字母匹配
	 * @param c
	 * 			要查找的类
	 * @param name
	 * 			要查找的数据表字段名
	 * @param value
	 * 			要查找的值
	 * @param pattern
	 * 			搜索的方式
	 * @return
	 * 			查找到的列表
	 * @throws Exception
	 */
	public List findByProperty(Class c, String name, Object value, int pattern) throws Exception;
	
	/**
	 * 获取分页的查询类
	 * @return
	 * @throws Exception
	 */
	public List findPagingByProperty(String hql) throws Exception;
}
